/*
 * @Descripttion:
 * @version:
 * @Author: ChenXiang
 * @Date: 2021-03-22 16:18:10
 * @LastEditors: ChenXiang
 * @LastEditTime: 2021-05-26 16:41:20
 */

export default {
  // 严格的身份证校验
  isCardID: (sId) => {
    if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
      console.log("你输入的身份证长度或格式错误");
      return false;
    }
    // 身份证城市
    const aCity = {
      11: "北京",
      12: "天津",
      13: "河北",
      14: "山西",
      15: "内蒙古",
      21: "辽宁",
      22: "吉林",
      23: "黑龙江",
      31: "上海",
      32: "江苏",
      33: "浙江",
      34: "安徽",
      35: "福建",
      36: "江西",
      37: "山东",
      41: "河南",
      42: "湖北",
      43: "湖南",
      44: "广东",
      45: "广西",
      46: "海南",
      50: "重庆",
      51: "四川",
      52: "贵州",
      53: "云南",
      54: "西藏",
      61: "陕西",
      62: "甘肃",
      63: "青海",
      64: "宁夏",
      65: "新疆",
      71: "台湾",
      81: "香港",
      82: "澳门",
      91: "国外"
    };
    if (!aCity[parseInt(sId.substr(0, 2))]) {
      console.log("你的身份证地区非法");
      return false;
    }

    // 出生日期验证
    const sBirthday = (
      sId.substr(6, 4) +
      "-" +
      Number(sId.substr(10, 2)) +
      "-" +
      Number(sId.substr(12, 2))
    ).replace(/-/g, "/");
    const d = new Date(sBirthday);
    if (
      sBirthday !==
      d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate()
    ) {
      console.log("身份证上的出生日期非法");
      return false;
    }

    // 身份证号码校验
    let sum = 0;
    const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    const codes = "10X98765432";
    for (let i = 0; i < sId.length - 1; i++) {
      sum += sId[i] * weights[i];
    }
    const last = codes[sum % 11]; // 计算出来的最后一位身份证号码
    if (sId[sId.length - 1] !== last) {
      console.log("你输入的身份证号非法");
      return false;
    }
    return true;
  },

  // '3303 2219 9807 080 41X' =>33032219980708041X
  convertIdCardNo: (val) => {
    if (!val) return val;
    return val.replace(/[^0-9|x|X|y|Y]/g, "");
  },

  // 从身份证获取性别
  getSexFromIdCardNo: (idCard) => {
    let sexStr = "";
    if (parseInt(idCard.slice(-2, -1)) % 2 === 1) {
      sexStr = "man";
    } else {
      sexStr = "woman";
    }
    return sexStr;
  },
  // 从身份证获取生日
  getBirthFromIdCardNo: (idCard) => {
    let birthday = "";
    if (idCard !== null && idCard !== "") {
      if (idCard.length === 15) {
        birthday = "19" + idCard.slice(6, 12);
      } else if (idCard.length === 18) {
        birthday = idCard.slice(6, 14);
      }
      birthday = birthday.replace(/(.{4})(.{2})/, "$1-$2-");
      // 通过正则表达式来指定输出格式为:1990-01-01
    }
    return birthday;
  },

  /**
   * 校验银行卡号--luhn算法
   * @param cardNo 卡号
   * @return boolean 有效卡号：TRUE;无效卡号：FALSE
   */
  checkCard: (number) => {
    const cardNo = number.replace(/\s/g, ""); // 清除所有空格
    if (isNaN(cardNo)) return false;
    if (cardNo.length < 12) {
      return false;
    }
    const nums = cardNo.split("");
    let sum = 0;
    let index = 1;
    for (let i = 0; i < nums.length; i++) {
      if ((i + 1) % 2 === 0) {
        let tmp = Number(nums[nums.length - index]) * 2;
        if (tmp >= 10) {
          const t = String(tmp) + "".split("");
          tmp = Number(t[0]) + Number(t[1]);
        }
        sum += tmp;
      } else {
        sum += Number(nums[nums.length - index]);
      }
      index++;
    }
    if (sum % 10 !== 0) {
      return false;
    }
    return true;
  }
};
